Drought & Soil Moisture Anomaly Index

SSMI – Standardized Soil Moisture Index

SSMI quantifies soil moisture anomalies by standardizing current soil moisture against a long-term climatology, similar to SPI/SPEI but using soil moisture instead of precipitation.

1. Scientific Definition

The Standardized Soil Moisture Index (SSMI) is a drought indicator derived from soil moisture time series. It shows how wet or dry the current soil moisture is compared to its historical distribution at each pixel.

Formula

SSMI = (SM − μSM) / σSM

  • SM – current soil moisture value
  • μSM – long-term mean soil moisture
  • σSM – long-term standard deviation

Typical Interpretation

  • SSMI < −2 → extreme drought
  • −2 to −1 → moderate to severe drought
  • −1 to +1 → near-normal soil moisture
  • > +1 → unusually wet conditions

Applications

  • Agricultural drought monitoring
  • Soil moisture anomaly mapping
  • Climate impact and hydrological studies

2. Data Requirements

Soil Moisture Datasets (examples)

  • SMAP – NASA/SMAP/SPL3SMP_E (L3, 9 km daily) in Earth Engine
  • Other satellite or model-based soil moisture products

Temporal Dimension

  • Long-term period (e.g. 5–10+ years) to build climatology
  • SSMI can be computed at daily, weekly, or monthly scales

Suggested Palette

[ "#581845", "#900C3F", "#C70039", "#FFC300", "#DAF7A6", "#2ECC71" ]

3. Google Earth Engine Code – SSMI (from SMAP)


// SSMI – Standardized Soil Moisture Index
// SSMI = (SM - mean(SM)) / stdDev(SM)

// 1. AOI
var roi = geometry;
Map.centerObject(roi, 6);

// 2. Load SMAP soil moisture (example: Enhanced L3, 9 km)
var smap = ee.ImageCollection("NASA/SMAP/SPL3SMP_E/006")  // use 005 for older years if needed
  .filterBounds(roi)
  .filterDate("2016-01-01", "2025-01-01")
  .select("soil_moisture");

// 3. Build long-term climatology (mean & stdDev)
var stats = smap.reduce(ee.Reducer.mean().combine({
  reducer2: ee.Reducer.stdDev(),
  sharedInputs: true
}));

var smMean = stats.select("soil_moisture_mean");
var smStd  = stats.select("soil_moisture_stdDev");

// 4. Select target period to compute SSMI (e.g. a specific month)
var target = smap
  .filterDate("2023-06-01", "2023-06-30")
  .mean()
  .clip(roi)
  .rename("SM_current");

// 5. Compute SSMI = (SM_current - mean) / stdDev
var ssmi = target.subtract(smMean)
  .divide(smStd)
  .rename("SSMI");

// 6. Visualization
var vis = {
  min: -3,
  max: 3,
  palette: [
    "#581845", "#900C3F", "#C70039",
    "#FFC300", "#DAF7A6", "#2ECC71"
  ]
};

Map.addLayer(ssmi, vis, "SSMI (Standardized Soil Moisture Index)");

// 7. Optional classification mask: drought areas (SSMI < -1)
var drought = ssmi.lt(-1).selfMask();
Map.addLayer(drought, {palette:["#C70039"]}, "Drought (SSMI < -1)", false);

// 8. Export SSMI map
Export.image.toDrive({
  image: ssmi,
  description: "SSMI_export",
  fileNamePrefix: "SSMI_SMAP_2023_06",
  region: roi,
  scale: 9000,     // ~9 km SMAP resolution
  crs: "EPSG:4326",
  maxPixels: 1e13
});